import java.util.ArrayList;

public class CompositePattern {
//    public static void main(String[] args) {
//        Component c0 = new Composite();
//        Component c1 = new Composite();
//        Component leaf1 = new Leaf("1");
//        Component leaf2 = new Leaf("2");
//        Component leaf3 = new Leaf("3");
//        c0.add(leaf1);
//        c0.add(c1);
//        c1.add(leaf2);
//        c1.add(leaf3);
//        c0.operation();
//    }
public static void main(String[] args) {
    Composite c0 = new Composite();
    Composite c1 = new Composite();
    Component leaf1 = new Leaf("1");
    Component leaf2 = new Leaf("2");
    Component leaf3 = new Leaf("3");
    c0.add(leaf1);
    c0.add(c1);
    c1.add(leaf2);
    c1.add(leaf3);
    c0.operation();
}
}
//抽象构件
interface Component {
//    public void add(Component c);
//    public void remove(Component c);
//    public Component getChild(int i);
//    public void operation();
    public void operation();
}
//树叶构件
class Leaf implements Component {
    private String name;
    public Leaf(String name) {
        this.name = name;
    }
    public void add(Component c) {
    }
    public void remove(Component c) {
    }
    public Component getChild(int i) {
        return null;
    }
    public void operation() {
        System.out.println("树叶" + name + "：被访问！");
    }
}
//树枝构件
class Composite implements Component {
    private ArrayList<Component> children = new ArrayList<Component>();
    public void add(Component c) {
        children.add(c);
    }
    public void remove(Component c) {
        children.remove(c);
    }
    public Component getChild(int i) {
        return children.get(i);
    }
    public void operation() {
        for (Object obj : children) {
            ((Component) obj).operation();
        }
    }
}